package org.example.campusforum.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 文章实体类
 *
 * 对应数据库中的article表，用于存储校园论坛中的文章信息。
 * 包含文章的基本信息、统计数据、状态管理等字段。
 * 支持文章的发布、编辑、删除、置顶等功能。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Article implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 文章主键ID
     * 数据库自增长字段，唯一标识一篇文章
     */
    private Long id;

    /**
     * 发表文章的用户ID
     * 外键关联user表的id字段，标识文章作者
     */
    private Long userId;

    /**
     * 文章标题
     * 文章的标题信息，用于展示和搜索
     */
    private String title;

    /**
     * 文章内容
     * 文章的正文内容，支持富文本格式
     */
    private String content;

    /**
     * 文章分类ID
     * 外键关联category表的id字段，标识文章所属分类
     */
    private Long categoryId;

    /**
     * 文章创建时间
     * 记录文章首次发布的时间，数据库默认为当前时间
     */
    private LocalDateTime createTime;

    /**
     * 文章更新时间
     * 记录文章最后一次修改的时间，数据库自动更新
     */
    private LocalDateTime updateTime;

    /**
     * 文章点赞数量
     * 统计该文章获得的点赞总数，默认为0
     */
    private Integer likeCount;

    /**
     * 文章浏览数量
     * 统计该文章被查看的次数，默认为0
     */
    private Integer viewCount;

    /**
     * 文章评论数量
     * 统计该文章下的评论总数，默认为0
     */
    private Integer commentCount;

    /**
     * 文章审核状态
     * 0: 待审核 - 文章刚发布，等待管理员审核
     * 1: 审核通过 - 文章已通过审核，可正常显示
     * 2: 审核不通过 - 文章未通过审核，不予显示
     */
    private Integer status;

    /**
     * 逻辑删除标识
     * 0: 正常状态 - 文章正常存在
     * 1: 已删除 - 文章已被逻辑删除，不再显示
     */
    private Integer isDeleted;

    /**
     * 文章置顶标识
     * 0: 普通文章 - 按正常顺序排列
     * 1: 置顶文章 - 在列表中优先显示
     */
    private Integer isTop;
}
